① c語言 gpu
U越來越強大,GPU為顯示圖像做了優化之外,在計算上已經超越了通用的CPU。如此強大的晶元如果只是作為顯卡就太浪費了,因此NVidia推出CUDA,讓顯卡可以用於圖像計算以外的目的,也就是超於游戲,使得GPU能夠發揮其強大的運算能力。
一年前NVIDIA發布CUDA,這是一種專門針對GPU的C語言開發工具。與以往採用圖形API介面指揮GPU完成各種運算處理功能不同,CUDA的出現使研究人員和工程師可以在熟悉的C語言環境下,自由地輸入代碼調用GPU的並行處理架構。這使得原先需要花費數天數周才能出結果的運算大大縮短到數幾小時,甚至幾分鍾之內。
CUDA是用於GPU計算的開發環境,它是一個全新的軟硬體架構,可以將GPU視為一個並行數據計算的設備,對所進行的計算進行分配和管理。在CUDA的架構中,這些計算不再像過去所謂的GPGPU架構那樣必須將計算映射到圖形API(OpenGL和Direct 3D)中,因此對於開發者來說,CUDA的開發門檻大大降低了。CUDA的GPU編程語言基於標準的C語言,因此任何有C語言基礎的用戶都很容易地開發CUDA的應用程序。
那麼,如何使得CPU與GPU之間很好的進行程序之間的銜接呢?以GPGPU的概念來看,顯卡仍然需要以傳統的DirectX和OpenGL這樣的API來實現,對於編程人員來說,這樣的方法非常繁瑣,而CUDA正是以GPGPU這個概念衍生而來的新的應用程序介面,不過CUDA則提供了一個更加簡便的方案——C語言。我們回顧一下CUDA的發展歷史。
② 請問各位大神 現在總說cuda什麼的好 銷售人員也總說顯卡有cuda 怎麼怎麼樣的 cuda到底是什麼 有啥好處
CUDA有兩個含義。
一是指CUDACore。即CUDA核心,NVIDIA顯卡從Fermi架構起開始採用,Kepler架構亦沿用。CUDA核心是架構中最核心部分也是數量占絕對優勢的部分,其實際上就是一個ALU,習慣上也可以叫做流處理器,是N卡的最基本運算單元。Fermi架構通常每組SM單元包含48個CUDACore,而Kepler架構每組SMX則包含192個。CUDACore的數量規模從根本上直接決定顯卡的運算規模,也直接影響顯卡的性能。GPU-Z中N卡的「著色器數量」(Shaders)里的數值即為CUDA核心的數量(注意僅限於Fermi和Kepler架構)。下面簡單附上一張GK104核心剖析圖,圖中每個綠色小方塊都代表一個CUDA核心。想要深入了解CUDA核心的工作原理還需要理解架構原理,這里不再介紹。
二是指CUDA環境,CUDA全稱,是NVIDIA推行的一種通用計算架構,與OpenCL、DirectCompute等一樣也是API的一種,基於C語言開發,特別針對CUDA核心架構的GPU開發,包含了多種先進的通用技術技術,例如並行架構等等。程序開發人員可以利用CUDA平台實現NVIDIA顯卡的通用計算,利用GPU來參與大規模運算。
CUDA計算多用於專業領域,消費級市場應用不大。銷售人員藉此概念玩懸乎罷了。
③ 關於cuda編程的,新手!糊里糊塗的,麻煩幫下忙!這是我自己寫的一個程序,編譯以後的結果!
#ifndef
#endif
要同時出現
④ 編程學習必看的書
一、《Web前端開發最佳實踐》
這本書是前端開發領域的經典之作,是一本扎實前端基本功,規范我們前端代碼的實踐性書籍。本書主要講解了HTML、CSS、Javascript以及移動端開發的最佳實踐方案,能夠對缺乏良好指導的開發者產生很大的幫助。通過閱讀本書我們可以掌握如何編寫高可讀性、高維護性、高性能的HTML、CSS以及Javascript。
二、《CSS那些事兒》
內容介紹:《CSS那些事兒》是2009年電子工業出版社出版的圖書,作者是林小志。該書通過對CSS技巧實例進行講解,淺入深地分析了CSS相關知識。
通過頁面中的文字、圖片、表格、表單等常見元素的處理及各種頁面布局方式的使用,使讀者能深入了解到如何在頁面中更好地運用CSS布局。尤其是在頁面布局的部分中,全面分析了多種布局方式,著重分解了兩列等高和三列等高的幾種方式,並相應說明了等高布局的優缺點。
三、《CSS權威指南》
內容介紹:《CSS權威指南》通過諸多實例,詳細講解了如何做到僅在一處建立樣式表就能創建或修改整個網站的外觀,以及如何得到html力不能及的更豐富的表現效果。同時展示了如何遵循css最新規范(css2和css2.1)將層疊樣式表的方方面面應用於實踐。
七、HTTP權威指南
內容介紹:《HTTP權威指南》由古爾利所著,《HTTP權威指南》詳細解釋了如何用HTTP來開發基於Web的應用程序,核心的[網際網路協議,如何與架構構建塊交互,如何正確實現網際網路客戶和伺服器等。
《HTTP權威指南》的中心內容是HTTP,本質是理解Web的工作原理,以及如何將這些知識應用到Web編程和管理之中,主要涵蓋HTTP的技術運作方式、產生動機、性能和目標以及一些相關技術問題。 《HTTP權威指南》適合所有想了解HTTP和Web底層結構的人閱讀。
八、高性能網站建設指南
內容介紹:《高性能網站建設指南》結合Web2.0以來Web開發領域的最新形勢和特點,介紹了網站性能問題的現狀、產生的原因,以及改善或解決性能問題的原則、技術技巧和最佳實踐。重點關注網頁的行為特徵,闡釋優化Ajax、CSS、JavaScript、Flash和圖片處理等要素的技術,全面涵蓋瀏覽器端性能問題的方方面面。
⑤ 關於編程的書籍
《程序員修煉之道》由一系列的獨立部分組成,涵蓋的主題從個人責任、職業發展,直到用於使代碼保持靈活、並且易於改編和復用的各種架構技術。利用許多富有娛樂性的奇聞軼事、有思想性的例子以及有趣的類比,全面闡釋了軟體開發的許多不同方面的最佳實踐和重大陷阱。無論你是初學者,是有經驗的程序員,還是軟體項目經理,本書都適合你閱讀。
代碼整潔之道
作者:Robert C. Martin,66% 推薦度
軟體質量,不但依賴於架構及項目管理,而且與代碼質量緊密相關。這一點,無論是敏捷開發流派還是傳統開發流派,都不得不承認。本書提出一種觀念:代碼質量與其整潔度成正比。干凈的代碼,既在質量上較為可靠,也為後期維護、升級奠定了良好基礎。作為編程領域的佼佼者,本書作者給出了一系列行之有效的整潔代碼操作實踐。這些實踐在本書中體現為一條條規則(或稱「啟示」),並輔以來自現實項目的正、反兩面的範例。只要遵循這些規則,就能編寫出干凈的代碼,從而有效提升代碼質量。
代碼大全(第 2 版)
作者:Steve McConnell,42% 推薦度
這是一本完整的軟體構建手冊,涵蓋了軟體構建過程中的所有細節。它從軟體質量和編程思想等方面論述了軟體構建的各個問題,並詳細論述了緊跟潮流的新技術、高屋建瓴的觀點、通用的概念,還含有豐富而典型的程序示例。這本書中所論述的技術不僅填補了初級與高級編程技術之間的空白,而且也為程序員們提供了一個有關編程技巧的信息來源。這本書對經驗豐富的程序員、技術帶頭人、自學的程序員及幾乎不懂太多編程技巧的學生們都是大有裨益的。可以說,無論是什麼背景的讀者,閱讀這本書都有助於在更短的時間內、更容易地寫出更好的程序。
重構:改善既有代碼的設計
作者:Martin Fowler,35% 推薦度
重構,一言以蔽之,就是在不改變外部行為的前提下,有條不紊地改善代碼。多年前,正是本書原版的出版,使重構終於從編程高手們的小圈子走出,成為眾多普通程序員日常開發工作中不可或缺的一部分。本書也因此成為與《設計模式》齊名的經典著作,被譯為中、德、俄、日等眾多語言,在世界范圍內暢銷不衰。
深入淺出設計模式
作者:Eric Freeman / Bert Bates / Kathy Sierra / Elisabeth Robson,29.4% 推薦度
《深入淺出設計模式》(影印版) 的編寫運用許多最新的研究,包括神經生物學、認知科學以及學習理論,這使得《深入淺出設計模式》(影印版) 能夠將這些設計模式深深地烙印在你的腦海中,不容易被遺忘。你將會更擅長於解決軟體設計中的問題,並能夠和你的團隊成員用模式的語言來更好地溝通。
人月神話
作者:Frederick P. Brooks Jr,27.9% 推薦度
作者為人們管理復雜項目提供了頗具洞察力的見解,既有很多發人深省的觀點,也有大量的軟體工程實踐。書中的內容來自布魯克斯在 IBM 公司 System 360 家族和 OS 360 中的項目管理經驗。初版的 20 年後,布魯克斯重新審視了他原先的觀點,增加了一些新的想法和建議。新增加的章節包括:原著中一些核心觀點的精華;在經過了一個時代以後,Brooks 博士對原先觀點新的認識;1986 年的經典文章《沒有銀彈》;對 1986 年所下論斷(在 10 年內不會出現銀彈)現在的認識。
⑥ 如何進行CUDA C程序核函數的調試
由於CUDA調試工具的不完善、CUDA調試工具上手難度較高,並行思想本身就難調試等因素,CUDA調試一直都是一件很蛋疼的事情。寫CUDA也有三四年了,前段時間在群里見別人問CUDA調試的問題,突然有想法寫個CUDA調試的博客。自己經驗尚淺,希望各位大大看過後能夠在評論里指點一二,共同完善這篇博客。
本博客只針纖友對邏輯bug。
1 定位bug
出現bug的第一想法自然是定位bug。cuda比較奇特的地方在於,有時報錯bug在500行,但500行出的代碼沒有錯誤,而是在1000行的地方邏輯錯了,十分頭疼。
下面介紹三種我總結的定位bug方法:
1.1 二分法
一半一半的注釋代碼,定位bug。比較笨拙和麻煩,但是十分好用。
1.2 輸出定位法
將整體代碼分為幾個模塊,正常的CUDA代碼大概可以分為數據初始化,內存申請,內存拷貝,核函數執行,結果拷貝等模塊。在每個模塊結束後輸出標志,示例如圖1。這樣在調試時就可以根據輸出快速定位bug大約在什麼位置。如下圖:
⑦ 如何學習cuda c
1、CUDAC編寫WindowsConsoleApplication
下面我們從一個簡單的例子開始學習CUDAC。
打開VS,新建一個CUDAWinApp項目,項目名稱為Vector,解決方案名稱為CUDADemo。依次點擊「確定」,「下一步」,選擇Emptyproject。點擊「Finished」。這樣一個CUDA的項目就建成了。
右鍵點擊Vector項目,依次選擇「添加」、「新建項」、「代碼」、「CUDA」。在名稱中輸入要添加的文件名。如Vector.cu。然後點擊添加。
下面在Vector.cu文件里實現兩個向量相加的程序。
//添加系統庫
#include
#include
//添加CUDA支持
#include
__global__voidVecAdd(float*A,float*B,float*C);
__host__voidrunVecAdd(intargc,char**argv);
intmain(intargc,char**argv)
{
runVecAdd(argc,argv);
CUT_EXIT(argc,argv);
}
__host__voidrunVecAdd(intargc,char**argv)
{//初始化host端內存數據
constunsignedintN=8;//向量維數
constunsignedintmemSize=sizeof(float)*N;//需要空間的位元組數
float*h_A=(float*)malloc(memSize);
float*h_B=(float*)malloc(memSize);
float*h_C=(float*)malloc(memSize);
for(unsignedinti=0;i<N;i++)
{h_A[i]=i;h_B[i]=i;}
//設備端顯存空間
float*d_A,*d_B,*d_C;
//初始化Device
CUT_DEVICE_INIT(argc,argv);
CUDA_SAFE_CALL(cudaMalloc((void**)&d_A,memSize));
CUDA_SAFE_CALL(cudaMalloc((void**)&d_B,memSize));
CUDA_SAFE_CALL(cudaMalloc((void**)&d_C,memSize));
CUDA_SAFE_CALL(cudaMemcpy(d_A,h_A,memSize,cudaMemcpyHostToDevice));
CUDA_SAFE_CALL(cudaMemcpy(d_B,h_B,memSize,cudaMemcpyHostToDevice));
VecAdd<<<1,N,memSize>>>(d_A,d_B,d_C);
CUT_CHECK_ERROR("Kernelexecutionfailed");
CUDA_SAFE_CALL(cudaMemcpy(h_C,d_C,memSize,cudaMemcpyDeviceToHost));
for(unsignedinti=0;i<N;i++)
{printf("%.0f",h_C[i]);}
free(h_A);free(h_B);free(h_C);
CUDA_SAFE_CALL(cudaFree(d_A));
CUDA_SAFE_CALL(cudaFree(d_B));
CUDA_SAFE_CALL(cudaFree(d_C));
}
__global__voidVecAdd(float*A,float*B,float*C)
{
//分配sharedmemory
extern__shared__floats_A[];
extern__shared__floats_B[];
extern__shared__floats_C[];
//從globalmemory拷貝到sharedmemory
constunsignedinti=threadIdx.x;
s_A[i]=A[i];
s_B[i]=B[i];
//計算
s_C[i]=s_A[i]+s_B[i];
//拷貝到globalmemory
C[i]=s_C[i];
}
由於這里不是講CUDA編程的,關於它的編程模型已經超出了我要介紹的范圍,您可以閱讀《GPU高性能運算之CUDA》來獲得CUDA編程模型的知識。
編譯Vector項目,執行此項目後會得到圖1如下輸出:
圖1Vector項目執行結果
2、CUDAC編寫DLL模塊
更多情況下的您的軟體可能只是使用CUDA來實現一段程序的加速,這種情況下我們可以使用CUDAC編寫DLL來提供介面。下面我們就將例1編譯成DLL。
在剛才的CUDADemo解決方案目錄下添加一個新的CUDA項目(當然您也可以重新建立一個解決方案)。項目名為VecAdd_dynamic。ApplicationType選為DLL,AdditionalOptions選擇EmptyProject。
第一步,添加頭文件,文件名最好與工程名同名,這樣便於您的維護工作。這里我向項目中添加了VecAdd_dynamic.h,在此頭文件中添加如下代碼
#ifndef_VECADD_DYNAMIC_H_
#define_VECADD_DYNAMIC_H_
//並行計算N維向量的加法
__declspec(dllexport)voidVecAdd(float*h_A,float*h_B,float*h_C,intN);
#endif
第二步,添加cpp文件,文件名為VecAdd_dynamic.cpp,在此文件中添加如下代碼
#include
#include"VecAdd_dynamic.h"
#ifdef_MANAGED
#pragmamanaged(push,off)
#endif
BOOLAPIENTRYDllMain(HMODULEhMole,DWORDul_reason_for_call,LPVOIDlpReserved)
{
returnTRUE;
}
#ifdef_MANAGED
#pragmamanaged(pop)
#endif
第三步,添加def文件,此文件的功能就是確保其它廠商的編譯器能夠調用此DLL里的函數。這一點非常關鍵,因為您的程序可能用到多個廠家的編譯器。文件名為VecAdd_dynamic.def。向該文件中添加:
EXPORTS
VecAdd
第四步,添加cu文件,文件名為VecAdd_dynamic.cu。注意此文件最好直接添加到項目目錄下,不要添加到源文件選項卡或其它已有的選項卡下。
在cu文件里添加如下代碼,實現要導出的函數。
#include
#include
#include
#if__DEVICE_EMULATION__
boolInitCUDA(void)
{returntrue;}
#else
boolInitCUDA(void)
{
intcount=0;
inti=0;
cudaGetDeviceCount(&count);
if(count==0)
{
fprintf(stderr,"Thereisnodevice./n");
returnfalse;
}
for(i=0;i<count;i++)
{
cudaDevicePropprop;
if(cudaGetDeviceProperties(&prop,i)==cudaSuccess)
{
if(prop.major>=1)
{break;}
}
}
if(i==count)
{
fprintf(stderr,"ThereisnodevicesupportingCUDA./n");
returnfalse;
}
cudaSetDevice(i);
printf("CUDAinitialized./n");
returntrue;
}
#endif
__global__voidD_VecAdd(float*g_A,float*g_B,float*g_C,intN)
{
unsignedinti=threadIdx.x;
if(i<N)
{g_C[i]=g_A[i]+g_B[i];}
}
voidVecAdd(float*h_A,float*h_B,float*h_C,intN)
{
if(!InitCUDA())
{return;}
float*g_A,*g_B,*g_C;
unsignedintsize=N*sizeof(float);
CUDA_SAFE_CALL(cudaMalloc((void**)&g_A,size));
CUDA_SAFE_CALL(cudaMalloc((void**)&g_B,size));
CUDA_SAFE_CALL(cudaMalloc((void**)&g_C,size));
CUDA_SAFE_CALL(cudaMemcpy(g_A,h_A,size,cudaMemcpyHostToDevice));
CUDA_SAFE_CALL(cudaMemcpy(g_B,h_B,size,cudaMemcpyHostToDevice));
D_VecAdd<<<1,N>>>(g_A,g_B,g_C,N);
CUDA_SAFE_CALL(cudaMemcpy(h_C,g_C,size,cudaMemcpyDeviceToHost));
cudaFree(g_A);cudaFree(g_B);cudaFree(g_C);
}
第五步,如果您已經正確完成了以上四步,那麼剩下的就只有編譯,只要您用過VS,這一步就不需要我介紹了吧。成功之後,在您的解決方案文件目錄下的Debug文件夾下會有一個VecAdd_dynamic.dll文件。
3、在.NET中使用CUDAC編寫的DLL
下面介紹在託管程序中如何使用VecAdd_dynamic.dll。
第一步,在上面的解決方案CUDADemo下添加一個C++/CLR的Windows窗體應用程序,工程名為NETDemo(當然您也可以重新建一個解決方案,工程名也是隨意的)。
第二步,在窗體上添加一個按鈕,名字隨意,我將它的現實文本改為「調用CUDA_DLL」,給這個按鈕添加click事件。我們的代碼將在這個事件里添加調用VecAdd()的程序。在窗體上添加一個文本框用來顯示調用輸出的結果。
第三步,代碼實現。為工程NETDemo添加一個頭文件,我將它命名為Win32.h,這個文件中主要是實現VecAdd()函數的導入。在此文件中添加如下代碼
#pragmaonce
namespaceWin32
{
usingnamespaceSystem::Runtime::InteropServices;
[DllImport("VecAdd_dynamic.dll",EntryPoint="VecAdd",CharSet=CharSet::Auto)]
extern"C"voidVecAdd(float*h_A,float*h_B,float*h_C,intN);
}
在Form1.h中,#pragmaonce之後namespaceNETDemo之前添加以下代碼。
#include"Win32.h"
#include
在button1_Click()中添加如下代碼
intN=8;
float*h_A=(float*)malloc(N*sizeof(float));
float*h_B=(float*)malloc(N*sizeof(float));
float*h_C=(float*)malloc(N*sizeof(float));
for(inti=0;i<N;i++)
{h_A[i]=i;h_B[i]=i;}
Win32::VecAdd(h_A,h_B,h_C,N);
String^reslut;
for(inti=0;i<N;i++)
{reslut+=Convert::ToString(h_C[i])+",";}
this->textBox1->Text=Convert::ToString(reslut);
free(h_A);free(h_B);free(h_C);
第四步、執行NETDemo項目。點擊「調用CUDA_DLL」,您會看到圖3所示的結果
圖3NETDemo運行結果
到現在為止您已經完全可以正確使用CUDA了。
⑧ 我目前能編一些比較基礎的C語言程序,那個cuda是不是和C有比較大的關系,我有一些C甚至C++的基
你好,
CUDA不難學,但是學好非常難。CUDA的主要功能是用GPU來做型辯運並行計算,它需要你不但有很好培悔C和C++的基礎,還需要你有一定的線性代數知識。如果想參加認證考試,你起碼要掌握以下幾個方面:
1,GPU硬體架構
2,CUDA programming model
3,線性代數
4,典型的並行計算pattern: 如並行歸約演算法,並行前綴加法,並行矩陣處理等等。
5,對於代碼本身而言,你需要熟練掌握指針和動態空間分配。
6,掌握各種數據類型的大小。
參考:Program massively paralell multiprocessors,這本書有電子版,全都配租正看完並且掌握的話你就可以考試了。
謝謝,望採納。
⑨ cuda編程,把CPU轉到CUDA的編程,這演算法有點不正確!求解
cuda是基於標准c語言的,你先把c語言的基礎學好,然後動手自己寫一頃知些c語言的程序,等對c語言有一定的功底之後,再看cuda,cuda與c語言的不同之處我覺得州塌在於那冊乎圓個內核函數,以及如何劃分線程塊和柵格的緯度和大小,以及如何實現對於線程的索引的搜索,讓每一個線程處理對應的一個變數或者幾個變數。
然後是cuda的一些基礎的語法,這些你可以看一些簡單的cuda的例子,例如矩陣相加的例子,通過這些程序的例子可以很好的理解這些語法。
⑩ 《Android編程權威指南》這本書翻譯的怎麼樣
原書名:Androidprogramming:thebignerdranchguide原出版社:BigNerdRanchGuides作者:(美)BillPhillipsBrianHardy譯者:王明發叢書名:圖靈程序設計叢書出版社:人民郵電出版社ISBN:9787115346438上架時間:2014-3-18出版日期:2014年4月開本:16開頁碼:523版次:1-1所屬分類:計算機>軟體與程序設計>移動開發>Android編輯推薦Amazon榜首暢銷書全面覆蓋Android開發知識點全真示例、循循善誘、輕松上手內容簡介書籍計算機書籍BigNerdRanch是美國一家專業的移動開發技術培訓機構,《Android編程權威指南》主要以訓練營的5天教學課程為基礎,融合了兩位作者多年的心得體會,是一本完全面向實戰的Android編程權威指南。全書共37章,詳細介紹了GeoQuiz、HelloMoon、DragAndDraw等8個Android應用。這些應用的難易程度不一,最復雜的CriminalIntent應用佔用了13章的篇幅。通過這些精心設計的應用,讀者可掌握很多重要的理論知識和開發技巧,獲得最前沿的開發經驗。如果你熟悉Java語言,或者了解對面向對象編程,那就立刻開始Android編程之旅吧!作譯者BillPhillipsBigNerdRanch資深Android講師、高級軟體工程師。他與BrianHardy合作,為BigNerdRanch開發了廣受好評的5天Android訓練營培訓課程。Bill擅長透徹地理解事物的本質,並幫助其他人做到這一點。閑暇時間,Bill喜歡閱讀和彈鋼琴。BrianHardyBigNerdRanch首席軟體工程師、資深講師。BigNerdRanch的Android、iOS和Ruby培訓課程均由Brian設計開發。閑暇時間,Brian喜歡騎自行車和聽音樂。目錄《Android編程權威指南》第1章Android應用初體驗11.1應用基礎21.2創建Android項目21.3Eclipse工作區導航51.4用戶界面設計61.4.1視圖層級結構91.4.2組件屬性101.4.3創建字元串資源111.4.4預覽界面布局121.5從布局XML到視圖對象131.6組件的實際應用151.6.1類包組織導入161.6.2引用組件161.6.3設置監聽器171.7使用模擬器運行應用211.8Android編譯過程22第2章Android與MVC設計模式262.1創建新類262.2Android與MVC設計模式30↓全部內容譯者序2007年,蘋果公司發布了革命性的iPhone,自此開啟了智能手機的新時代。隨後,2008年,谷歌公司和開放手機聯盟共同開發並推出了Android智能手機。時至今日,移動智能設備不僅深刻影響了智能手機行業,也改變了整個科技產業以及人們生活的方方面面,在全球掀起巨大的移動浪潮。迎著這股浪潮,國際巨頭、創業公司、獨立開發者各展身手,奮力搏擊,搶登浪潮之巔。蘋果一度成了全球市值最高的公司,三星則是賣出了數億部Android手機。2013年,網路以19億美元的價格收購了91無線。2014年開春,Facebook更是以190億美元的天價收購了開發WhatsApp應用僅有50名員工的公司,直接把這股移動浪潮推到了巔峰。豪不誇張地說,所有這一切都離不開移動軟體的開發。目前主流的開發平台是蘋果的iOS系統和谷歌的Android系統。憑借精美絕倫的UI、流暢順滑的交互體驗,iOS開發在早期搶佔了先機。但如今,谷歌在Android系統UI設計及優化方面的前進步伐已趕超蘋果在創新方面的進步。越來越多的軟體人開始投身Android應用開發陣營。對於業余愛好者來說,Android還是iOS,喜歡誰就選誰。而對於專業開發人員,果粉也好,Android迷也罷,從職業發展及商業利益角度來說,掌握雙平台開發是必須的。作為榮獲2012Jolt生產力大獎的iOS編程教程的姊妹篇,BigNerdRanch公司再接再厲,推出了這本《Android編程權威指南》。英文版甫一上架立即贏得了Amazon讀者的廣泛贊譽。本書基於BigNerdRanch公司的Bootcamp教程編寫而成。BigNerdRanch創於2001年,是美國一家知名IT培訓公司,每年為微軟、谷歌、Faceboook等行業巨頭培養眾多專業人才。而BootCamp在英文中原意為美國海軍陸戰隊新兵訓練營,應用於IT培訓行業中,意指通過全真IT項目實戰,培訓出像美國海軍陸戰隊員那樣優秀的IT人才。本書適合有一定Java編程經驗(至少熟悉Java)並對Android開發感興趣的讀者閱讀。本書最大的特點是,從Android應用的基本概念及組成開始介紹直至完成一個復雜實用的谷歌地圖應用,作者巧妙地把Android開發所需的龐雜知識、行業實踐、編程規范等融入本書,並以一種潤物無聲的導學方式引領讀者輕松完成全書的開發學習。第26章在講解後台任務和線程時,作者寓教於樂,還精心安排了在鞋店工作的閃電俠案例,既能幫助讀者形象地理解復雜抽象概念,又讓人印象深刻,難以忘卻。類似這樣的案例、幽默全書俯拾皆是,還是等讀者自己去發掘吧。另外,幾乎每章都配有深入學習及難度逐步升級的挑戰練習版塊。深入學習意在讓讀者進一步掌握本章關鍵知識點並指明學習更高級主題的方向;挑戰練習能夠讓讀者立即獲得練手的機會,通過練習鞏固運用所學知識。學完本書,在實際開發中,讀者自然而然就會知道該做什麼,如何去做以及為什麼這樣做。最後,感謝圖靈各位編輯老師的辛勤工作,尤其感謝李靜老師的細心指導,本書及本人都獲益良多。更要感謝的是我的clover和千尋,沒有他們的寬容、理解與支持,本書譯稿不可能完成。雖然我已盡力傳達原作本意並保證譯稿的較高質量,但有時拼寫錯誤、因版本升級而導致某些內容不再適用,甚至是囿於個人水平而犯錯的情況再所難免。如果你發現了問題或有好的建議,請批評指正並不吝電郵提交至[email protected]或反饋至圖靈社區。2014年2月28日於上海