-লাইটডিএম লগ ইন সমস্যা (লগইন লুপ)
-ড্রাইভার আইটল নিয়ে সমস্যা ("ড্রাইভার ইনস্টলেশন ব্যর্থ হয়েছে: এটি প্রদর্শিত হচ্ছে যে একটি এক্স সার্ভার চলছে ...")
উবুন্টু 16.04 64 বিট এ সাফল্যের সাথে একটি এনভিডিয়া সিইউডিএ টুলকিট ইনস্টল করতে আমার এখনই করতে হয়েছিল:
- পেনড্রাইভে উবুন্টুর একটি লাইভ ইমেজ করুন (8 গিগাবাইট পেন যথেষ্ট) - আপনার হোস্ট লিনাক্স সিস্টেমে ব্যর্থ ইনস্টল করার আগে এই জাতীয় চেষ্টা এক টন স্নায়ু সংরক্ষণ করবে !!!
- পেনড্রাইভে লাইভ সেশনে লগইন করুন ("ইনস্টল করার আগে উবুন্টু চেষ্টা করুন")
লাইভ সেশনে sudo ব্যবহারকারী যুক্ত করুন:
সুডো অ্যাডুজার অ্যাডমিন (# পাস: অ্যাডমিন 1)
sudo usermod -aG sudo প্রশাসক
লাইভ সেশন থেকে লগআউট, # অ্যাডমিন হিসাবে লগ ইন করুন
- এনভিডিয়া অফিসিয়াল সাইট থেকে সিইউডিএ টুলকিট ডাউনলোড করুন (~ 1.5 গিগাবাইট)
ডাউনলোড করা ইনস্টলার ফাইলের জন্য সুবিধাগুলি পরিবর্তন করুন (এই
ধাপে ইনস্টল করবেন না!): sudo chmod + x cuda_X.X.run
কনসোল ভিউতে স্যুইচ করুন:
Ctr + Alt + F1 (টার্মিনাল দৃশ্যে স্যুইচ করতে) Ctr + Alt + F7 (টার্মিনাল ভিউ থেকে গ্রাফিকাল সার্ভারে স্যুইচ করতে)
কনসোল ভিউতে (Ctr + Alt + F1) লগ ইন করুন:
লগইন: অ্যাডমিন পাস: অ্যাডমিন 1
গ্রাফিকাল চলমান পরিষেবা বন্ধ করুন:
sudo পরিষেবা লাইটডিএম স্টপ
গ্রাফিকাল সার্ভারটি বন্ধ আছে কিনা তা পরীক্ষা করে দেখুন - সিটিআর + অল্ট + এফ -7 স্যুইচ করার পরে মনিটরটি ফাঁকা কালো হওয়া উচিত, কনসোল ভিউতে ফিরে যেতে সিটিআর + আল্ট + এফ 1
এই জাতীয় কনফিগারেশন সহ সিইউডিএ টুলকিট ইনস্টল করুন:
সুডো।
গ্রাফিকাল সার্ভার চালু করুন:
sudo সার্ভিস লাইটডিএম শুরু
ব্যবহারকারী হিসাবে লগ ইন করুন (আপনি যদি সরাসরি লাইভ সেশনে লগ আউটতে # বুন্টু হিসাবে লগইন করেন):
লগইন: অ্যাডমিন পাস: অ্যাডমিন 1
এনভিসিসি সংকলক জিপিইউ ব্লকগুলিতে প্রদত্ত সাধারণ সমান্তরাল ভেক্টর যোগফলের সাথে কাজ করে যাচাই করুন:
নতুন ফাইলগুলিতে vecSum.cu এবং book.h সংরক্ষণ করুন, টার্মিনালে সংকলন করুন এবং চালনা করুন: /usr/local/cuda-8.0/bin/nvcc vecSum.cu&& Clear & ./a.out
কনসোল প্রিন্টআউট চেক করুন - এটির মতো হওয়া উচিত: 0.000000 + 0.000000 = 0.000000
-1.100000 + 0.630000 = -0.000000
-2.200000 + 2.520000 = 0.319985
-3.300000 + 5.670000 = 2.119756
-4.400000 + 10.080000 = 5.679756
-5.500000 + 15.750000 = 10.250000
-6.600000 + 22.680000 = 16.017500
-7.700000 + 30.870001 = 23.170002
-8.800000 + 40.320000 = 31.519997
-9.900000 + 51.029999 = 41.129967
যদি পেনড্রাইভ লাইভ সেশনে সবকিছু ঠিকঠাক হয় তবে আপনার হোস্ট লিনাক্স সিস্টেমেও এটি করুন
পিএস দয়া করে নোট করুন যে এটি আদর্শ টিউটোরিয়াল নয়, তবে এটি আমার পক্ষে দুর্দান্ত কাজ করে!
======= vecSum.cu =====
#include "book.h"
#define N 50000
///usr/local/cuda-8.0/bin/nvcc vecSum.cu && clear && ./a.out
//"HOST" = CPU
//"Device" = GPU
__global__ void add( float *a, float *b, float *c )
{
int tid = blockIdx.x;
if ( tid < N )
c[ tid ] = a[ tid ] + b[ tid ];
}
int main ( void )
{
float a[ N ], b[ N ], c[ N ];
float *dev_a, *dev_b, *dev_c;
//GPU memory allocation
HANDLE_ERROR( cudaMalloc( ( void** )&dev_a, N * sizeof( float ) ) );
HANDLE_ERROR( cudaMalloc( ( void** )&dev_b, N * sizeof( float ) ) );
HANDLE_ERROR( cudaMalloc( ( void** )&dev_c, N * sizeof( float ) ) );
//sample input vectors CPU generation
for ( int i = 0; i < N; i++ )
{
a[ i ] = -i * 1.1;
b[ i ] = i * i * 0.63;
}
//copy/load from CPU to GPU data vectors a[], b[] HostToDevice
HANDLE_ERROR( cudaMemcpy( dev_a, a, N * sizeof( float ), cudaMemcpyHostToDevice ) );
HANDLE_ERROR( cudaMemcpy( dev_b, b, N * sizeof( float ), cudaMemcpyHostToDevice ) );
//calculate sum of vectors on GPU
add<<<N,1>>> ( dev_a, dev_b, dev_c );
//copy/load result vector from GPU to CPU c[] DeviceToHost
HANDLE_ERROR( cudaMemcpy( c, dev_c, N * sizeof( float ), cudaMemcpyDeviceToHost ) );
//printout results
for ( int i = 0; i < 10; i++ ) printf( "%f + %f = %f\n", a[ i ], b[ i ], c[ i ] );
//free memory and constructed objects on GPU
cudaFree( dev_a );
cudaFree( dev_b );
cudaFree( dev_c );
return 0;
}
========= book.h ======
/*
* Copyright 1993-2010 NVIDIA Corporation. All rights reserved.
*
* NVIDIA Corporation and its licensors retain all intellectual property and
* proprietary rights in and to this software and related documentation.
* Any use, reproduction, disclosure, or distribution of this software
* and related documentation without an express license agreement from
* NVIDIA Corporation is strictly prohibited.
*
* Please refer to the applicable NVIDIA end user license agreement (EULA)
* associated with this source code for terms and conditions that govern
* your use of this NVIDIA software.
*
*/
#ifndef __BOOK_H__
#define __BOOK_H__
#include <stdio.h>
static void HandleError( cudaError_t err,
const char *file,
int line ) {
if (err != cudaSuccess) {
printf( "%s in %s at line %d\n", cudaGetErrorString( err ),
file, line );
exit( EXIT_FAILURE );
}
}
#define HANDLE_ERROR( err ) (HandleError( err, __FILE__, __LINE__ ))
#define HANDLE_NULL( a ) {if (a == NULL) { \
printf( "Host memory failed in %s at line %d\n", \
__FILE__, __LINE__ ); \
exit( EXIT_FAILURE );}}
template< typename T >
void swap( T& a, T& b ) {
T t = a;
a = b;
b = t;
}
void* big_random_block( int size ) {
unsigned char *data = (unsigned char*)malloc( size );
HANDLE_NULL( data );
for (int i=0; i<size; i++)
data[i] = rand();
return data;
}
int* big_random_block_int( int size ) {
int *data = (int*)malloc( size * sizeof(int) );
HANDLE_NULL( data );
for (int i=0; i<size; i++)
data[i] = rand();
return data;
}
// a place for common kernels - starts here
__device__ unsigned char value( float n1, float n2, int hue ) {
if (hue > 360) hue -= 360;
else if (hue < 0) hue += 360;
if (hue < 60)
return (unsigned char)(255 * (n1 + (n2-n1)*hue/60));
if (hue < 180)
return (unsigned char)(255 * n2);
if (hue < 240)
return (unsigned char)(255 * (n1 + (n2-n1)*(240-hue)/60));
return (unsigned char)(255 * n1);
}
__global__ void float_to_color( unsigned char *optr,
const float *outSrc ) {
// map from threadIdx/BlockIdx to pixel position
int x = threadIdx.x + blockIdx.x * blockDim.x;
int y = threadIdx.y + blockIdx.y * blockDim.y;
int offset = x + y * blockDim.x * gridDim.x;
float l = outSrc[offset];
float s = 1;
int h = (180 + (int)(360.0f * outSrc[offset])) % 360;
float m1, m2;
if (l <= 0.5f)
m2 = l * (1 + s);
else
m2 = l + s - l * s;
m1 = 2 * l - m2;
optr[offset*4 + 0] = value( m1, m2, h+120 );
optr[offset*4 + 1] = value( m1, m2, h );
optr[offset*4 + 2] = value( m1, m2, h -120 );
optr[offset*4 + 3] = 255;
}
__global__ void float_to_color( uchar4 *optr,
const float *outSrc ) {
// map from threadIdx/BlockIdx to pixel position
int x = threadIdx.x + blockIdx.x * blockDim.x;
int y = threadIdx.y + blockIdx.y * blockDim.y;
int offset = x + y * blockDim.x * gridDim.x;
float l = outSrc[offset];
float s = 1;
int h = (180 + (int)(360.0f * outSrc[offset])) % 360;
float m1, m2;
if (l <= 0.5f)
m2 = l * (1 + s);
else
m2 = l + s - l * s;
m1 = 2 * l - m2;
optr[offset].x = value( m1, m2, h+120 );
optr[offset].y = value( m1, m2, h );
optr[offset].z = value( m1, m2, h -120 );
optr[offset].w = 255;
}
#if _WIN32
//Windows threads.
#include <windows.h>
typedef HANDLE CUTThread;
typedef unsigned (WINAPI *CUT_THREADROUTINE)(void *);
#define CUT_THREADPROC unsigned WINAPI
#define CUT_THREADEND return 0
#else
//POSIX threads.
#include <pthread.h>
typedef pthread_t CUTThread;
typedef void *(*CUT_THREADROUTINE)(void *);
#define CUT_THREADPROC void
#define CUT_THREADEND
#endif
//Create thread.
CUTThread start_thread( CUT_THREADROUTINE, void *data );
//Wait for thread to finish.
void end_thread( CUTThread thread );
//Destroy thread.
void destroy_thread( CUTThread thread );
//Wait for multiple threads.
void wait_for_threads( const CUTThread *threads, int num );
#if _WIN32
//Create thread
CUTThread start_thread(CUT_THREADROUTINE func, void *data){
return CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)func, data, 0, NULL);
}
//Wait for thread to finish
void end_thread(CUTThread thread){
WaitForSingleObject(thread, INFINITE);
CloseHandle(thread);
}
//Destroy thread
void destroy_thread( CUTThread thread ){
TerminateThread(thread, 0);
CloseHandle(thread);
}
//Wait for multiple threads
void wait_for_threads(const CUTThread * threads, int num){
WaitForMultipleObjects(num, threads, true, INFINITE);
for(int i = 0; i < num; i++)
CloseHandle(threads[i]);
}
#else
//Create thread
CUTThread start_thread(CUT_THREADROUTINE func, void * data){
pthread_t thread;
pthread_create(&thread, NULL, func, data);
return thread;
}
//Wait for thread to finish
void end_thread(CUTThread thread){
pthread_join(thread, NULL);
}
//Destroy thread
void destroy_thread( CUTThread thread ){
pthread_cancel(thread);
}
//Wait for multiple threads
void wait_for_threads(const CUTThread * threads, int num){
for(int i = 0; i < num; i++)
end_thread( threads[i] );
}
#endif
#endif // __BOOK_H__
optirun
)। অন্যান্য ড্রাইভাররা আমাকে লগইন লুপ বা কালোতে জাগিয়ে তুললunity-greeter
! আমি আপনাকে যথেষ্ট ধন্যবাদ দিতে পারি না:)