cuda核函数不执行的可能原因?

练习了一个矩阵乘法的例子,每个block配置16×16个thread,
当做5000×5000的矩阵乘法时,结果就全为0,核函数不执行不知道原因是什么?
每个grid每一维可以包含至少65535个block,算了下没有超出但是核函数没执行。。。

5个回答

代码是在设备上运行的么,没有使用主机变量吧,没有爆内存吧,还有驱动程序对不对。你可以先测试自带的例子程序,排除环境问题。

weixin_38256708
weixin_38256708 算1000×1000乘法就没问题,显卡内存4个G,刚算了下5000*5000*3*4/1024/1024/1024<4G,代码是在设备上跑的。。。
一年多之前 回复

#define blocksize 32
#define BLOCK_NUM 2048

global void matrix_mul(float M, float *N, float res,int L_cols,int L_rows, int R_cols)
{

int bid=blockIdx.x;
int row=threadIdx.y;
int col=threadIdx.x;
int blockRow,blockCol,r=(L_rows+blocksize-1)/blocksize,c=(R_cols+blocksize-1)/blocksize;
float sum;

for(int u=bid;u<r*c;u+= BLOCK_NUM)
{
sum=0;
blockRow=u%r;
blockCol=u/r;

for(int i=0;i<((L_cols+blocksize-1)/blocksize);i++)
{

shared float subA[blocksize][blocksize];
shared float subB[blocksize][blocksize];

if((blockRow*blocksize+row)<L_rows&&(i*blocksize+col)<L_cols)
subA[row][col]=M[(i*blocksize+col)*L_rows+blockRow*blocksize+row];
else
subA[row][col]=0;
if((blockCol*blocksize+col)<R_cols&&(i*blocksize+row)<L_cols)
subB[row][col]=N[L_cols*(blockCol*blocksize+col)+row+i*blocksize];
else
subB[row][col]=0;

__syncthreads();
for(int j=0;j<blocksize;j++)
sum+=subA[row][j]*subB[j][col];
__syncthreads();
}
if((blockRow*blocksize+row)<L_rows&&(blockCol*blocksize+col)<R_cols)
res[L_rows*(blockCol*blocksize+col)+blockRow*blocksize+row]=sum;

}
}


代码如上图,做10000×10000矩阵乘法结果就全是0了,但是算了下内存没超

原因有多种多样的:

(1)其中常见的一种是,32 * 32 = 1024线程的block大小,超出了贵卡的能力范围。
(需要fermi+的,请告知一下你的卡的信息)

(2)此外的一种常见原因是越界访存,请确保你用的数据(例如缓冲区)也随之相应扩大了。

没看到你是怎么invoke的,

不过5000*5000*sizeof(float)我目测是超了...
ps...每个thread都需要占用资源,是无法达到理论上限的。

weixin_38256708
weixin_38256708 算了下才几百M啊,我的显存有4个G
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
cuda核函数奇怪的问题?
k = pDats[j].nCount - 101; { for (m = 0;m < 90;m++) { if (k+m<pDats[j].nCount && k + m>=0) pRsts[i].dDats[m] = pDats[j].pDats[k+m].x; } } 上面核函数能正确执行, 改成 for (k = 10;k < pDats[j].nCount - 101;k++) { for (m = 0;m < 90;m++) { if (k+m<pDats[j].nCount && k + m>=0) pRsts[i].dDats[m] = pDats[j].pDats[k+m].x; } } 结果直接退出了
cuda一个global函数里调用多个核函数出问题。
caffe编写loss层时, 我一个global函数里有多个核函数,但是有时前两个核函数不执行,有时候又执行,不清楚问题出在哪里? ``` template <typename Dtype> void PixelClustingLossLayer<Dtype>::Forward_gpu( const vector<Blob<Dtype>*>& bottom, const vector<Blob<Dtype>*>& top) { const int num = bottom[0]->num(); const int data_channels = bottom[0]->channels(); const int mask_channels = bottom[1]->channels(); const int height = bottom[0]->height(); const int width = bottom[0]->width(); const int spatial_dim = height * width; const int nc = num * data_channels; const int data_count = bottom[0]->count(); const int mask_count = bottom[1]->count(); Dtype* pos_num_data = pos_num_.mutable_cpu_data(); Dtype* neg_num_data = neg_num_.mutable_cpu_data(); caffe_gpu_set(mask_count, Dtype(0.), pixel_mask_.mutable_gpu_data()); caffe_gpu_set(num, Dtype(0.), loss_mask_.mutable_gpu_data()); caffe_gpu_set(num*data_channels, Dtype(0.), pos_ave_.mutable_gpu_data()); caffe_gpu_set(num*data_channels, Dtype(0.), neg_ave_.mutable_gpu_data()); caffe_gpu_set(num, Dtype(0.), pos_loss_.mutable_gpu_data()); caffe_gpu_set(num, Dtype(0.), neg_loss_.mutable_gpu_data()); caffe_gpu_set(num, Dtype(0.), center_loss_.mutable_gpu_data()); for(int n=0; n<num; ++n) { caffe_gpu_asum(spatial_dim, bottom[1]->gpu_data() + n * spatial_dim, pos_num_.mutable_cpu_data() + n); neg_num_data[n] = spatial_dim - pos_num_data[n]; } //LOG(INFO)<<"There are "<<pos_num_.cpu_data()[0]<<" pos pixels and "<<neg_num_.cpu_data()[0]<<" neg pixels."; GetTotalValue<Dtype> <<<CAFFE_GET_BLOCKS(data_count), CAFFE_CUDA_NUM_THREADS>>>(data_count, bottom[0]->gpu_data(), bottom[1]->gpu_data(), pos_ave_.mutable_gpu_data(), neg_ave_.mutable_gpu_data(), data_channels, height, width); //LOG(INFO)<<"There are 111 neg pixels."; GetAveValue<Dtype> <<<CAFFE_GET_BLOCKS(nc), CAFFE_CUDA_NUM_THREADS>>>(nc, pos_num_.gpu_data(), neg_num_.gpu_data(), pos_ave_.mutable_gpu_data(), neg_ave_.mutable_gpu_data(), center_loss_.mutable_gpu_data(), data_channels); //LOG(INFO)<<"There are 222 neg pixels."; PowerEuclideanDistance<Dtype> <<<CAFFE_GET_BLOCKS(mask_count), CAFFE_CUDA_NUM_THREADS>>>(mask_count, bottom[0]->gpu_data(), bottom[1]->gpu_data(), pos_ave_.gpu_data(), neg_ave_.gpu_data(), euclidean_dis_.mutable_gpu_data(), mask_channels, data_channels, height, width); ComputePixelLoss<Dtype> <<<CAFFE_GET_BLOCKS(mask_count), CAFFE_CUDA_NUM_THREADS>>>(mask_count, bottom[1]->gpu_data(), euclidean_dis_.gpu_data(), pos_loss_.mutable_gpu_data(), neg_loss_.mutable_gpu_data(), pos_num_.gpu_data(), neg_num_.gpu_data(), pixel_mask_.mutable_gpu_data(), mask_channels, height, width, alpha_); ComputeClassLoss<Dtype> <<<CAFFE_GET_BLOCKS(num), CAFFE_CUDA_NUM_THREADS>>>(num, center_loss_.mutable_gpu_data(), loss_mask_.mutable_gpu_data(), beta_); caffe_gpu_add(num, neg_loss_.gpu_data(), pos_loss_.gpu_data(), loss_.mutable_gpu_data()); caffe_gpu_add(num, loss_.gpu_data(), center_loss_.gpu_data(), loss_.mutable_gpu_data()); Dtype loss; caffe_gpu_asum(num, loss_.gpu_data(), &loss); LOG(INFO)<<loss/Dtype(num); top[0]->mutable_cpu_data()[0] = loss / num; } ``` 主要是GetTotalValue()函数和GetAveValue()函数,偶尔执行,偶尔不执行,头都晕了。 有没有大神指点迷津。
CUDA核函数运行时参数加入cudaStream时出现Unrecognized token
核函数定义 ``` __global__ void local_binary_fit_part1_kernel( float *Hu_gpu, float *I_gpu, const float *img_gpu, const float *phi_gpu, const float epsilon, const int width, const int height, const int depth ) { int x = threadIdx.x; int y = blockIdx.x; int z = blockIdx.y; int pos = x + (y + z*height)*width; float hu = 0.5*(1 + (2 / PI)*atan(phi_gpu[pos] / epsilon)); Hu_gpu[pos] = hu; I_gpu[pos] = hu * img_gpu[pos]; return; } ``` 在C函数中调用该核函数 ``` cudaStream_t stream0, stream1; cudaStreamCreate(&stream0); cudaStreamCreate(&stream1); int div1 = depth / 2; int div2 = depth - div1; dim3 grid1(height, div1, 1); dim3 grid2(height, div2, 1); cudaMemcpyAsync(phi_gpu, phi, div1*height*width*sizeof(float), cudaMemcpyHostToDevice, stream0); cudaMemcpyAsync(phi_gpu + div1*width*height, phi + div1*width*height, div2*height*width*sizeof(float), cudaMemcpyHostToDevice, stream1); cudaMemcpyAsync(img_gpu, img, div1*height*width*sizeof(float), cudaMemcpyHostToDevice, stream0); cudaMemcpyAsync(img_gpu + div1*width*height, img + div1*width*height, div2*height*width*sizeof(float), cudaMemcpyHostToDevice, stream1); local_binary_fit_part1_kernel <<<grid1, width, 0, stream0 >>>(Hu_gpu, I_gpu, img_gpu, phi_gpu, epsilon, width, height, depth); local_binary_fit_part1_kernel <<<grid2, width,0, stream1 >>>(Hu_gpu + div1*width*height, I_gpu + div1*width*height, img_gpu + div1*width*height, phi_gpu + div1*width*height, epsilon, width, height, depth); cudaStreamSynchronize(stream0); cudaStreamSynchronize(stream1); cudaStreamDestroy(stream0); cudaStreamDestroy(stream1); ``` 编译时出现如下错误 error : unrecognized token 如改成 ``` local_binary_fit_part1_kernel <<<grid1, width>>>(Hu_gpu, I_gpu, img_gpu, phi_gpu, epsilon, width, height, depth); ``` 则能通过,这个是什么原因
cuda程序调用核函数时 <<< >>> 显示出错
cuda程序调用核函数时 <<< >>> 显示出错 还有 syncthreads() 也显示未定义, 我查找了源文件加了#define __CUDACC__可以解决,但我觉得并不是好的解决办法。 还有texture,tex1Dfetch都显示未定义,我不知道为什么,需要什么头文件? cuda 7.5,vs2013,win10 都能编译运行通过,但总是显示这么多未定义,为什么,要怎样解决?
windows线程池有没有类似cuda内函数__synchreads()用于同步所有线程的函数
windows线程池有没有类似cuda内函数__synchreads()用于同步所有线程的函数
CUDA kernel函数内for循环引发unspecific launch failure
我想测试一下CUDA kernel函数中的for循环的循环次数可不可以无限大。于是我写了一个简单的代码如下: 于是当size像下面的一千万那么大的时候,程序不正确了。显示调用核函数失败 unspecific launch failure 我用nsight带的工具测试了一下,并不是寄存器超了或者内存分配失败或溢出,只是随着size的增加,每个warp的指令数IPW(Instructions Per Warp)会增加。是不是错误与这个有关?但是下面的程序代码看起来没有什么错误,如果换成C++的话循环多少次都可以,是不是CUDA对kernel有什么限制?我想知道它错误的原因。 系统:Win10 pro 64bit IDE:Visual Studio 2015 community CUDA 8.0 GPU: GTX860M 4GB #include "cuda_runtime.h" #include "device_launch_parameters.h" #include "stdlib.h" #include <iostream> using namespace std; __global__ void Kernel(double *M_gpu, int size) { for (int i = 0; i < size; i++) { M_gpu[i] = i / 2 + 6; } } int main() { cudaError_t cudaStatus; //分配CPU空间 int size = 10000000; double *M = (double *)malloc(sizeof(double)*size); //分配GPU空间 double *M_gpu; cudaStatus = cudaMalloc((void**)&M_gpu, sizeof(double)*size); if (cudaStatus != cudaSuccess) { cout << "分配CPU空间失败!" << cudaGetErrorString(cudaStatus) << endl; getchar(); exit(0); } //调用核函数 Kernel << <1, 1 >> > (M_gpu, size); cudaDeviceSynchronize(); cudaStatus = cudaGetLastError(); if (cudaStatus != cudaSuccess) { cout << "调用核函数失败!" << cudaGetErrorString(cudaStatus) << endl; getchar(); exit(0); } //将数据从GPU拷贝回CPU cudaStatus = cudaMemcpy(M, M_gpu, sizeof(double)*size, cudaMemcpyDeviceToHost); if (cudaStatus != cudaSuccess) { cout << "拷贝数据失败!" << cudaGetErrorString(cudaStatus) << endl; getchar(); exit(0); } //END cout << "Success!" << endl; getchar(); }
Ubuntu上编写的cuda核函数终端直接输出为什么需要添加cudaDeviceReset()???求解救
系统:Ubuntu18.04 这段代码没法直接在终端上输出 ``` #include<stdio.h> __global__ void Hello() { printf("GPU\n"); } int main(void) { printf("CPU\n"); Hello<<<1,10>>>(); } ``` 但是添加上cudaDeviceReset()后能够输出到终端上 ``` #include<stdio.h> __global__ void Hello() { printf("GPU\n"); } int main(void) { printf("CPU\n"); Hello<<<1,10>>>(); cudaDeviceReset(); } ``` ????????
使用CUDA的项目打不开了
![图片说明](https://img-ask.csdn.net/upload/202002/14/1581669681_482548.png) 我原来用的CUDA8.0,换了新电脑了8.0安装不了,就安装了10.0,结果项目打不开了。
为什么我的tensorflow2.0.0报错找不到cuda9.0?
上个月成功跑出了一个图像识别的py脚本,这个月开始鼓捣服务器,结果服务器没弄好,原本的脚本也不知为何开始报错了,原代码一个字没改过... 上网搜了几个方法更新了tensorflow-gpu之后,开始报莫名其妙的错误了: ![图片说明](https://img-ask.csdn.net/upload/202002/16/1581844664_325945.png) <br>CMD报错结果如上 <br>可是问题是原先的配置便是tensorflow2.0.0+tensorflow-gpu1.9.0+CUDA10.0.0 环境变量里配的PATH也没改过 球球各位带神、带牛们帮小弟我看看
cuda cudaMemcpy 函数
cudaMemcpy的第三个参数是要拷贝数据的大小,如果这个大小小于我在gpu上分配的存储空间(第一个参数),会出现什么情况。
CUDA编程中如何使用双精度FP64单元,计算单精度FP32指令
我的CUDA核函数中只使用了INT32和FP32的数据类型,可是在用NVprofiler拿到的profiling中: ![图片说明](https://img-ask.csdn.net/upload/201708/14/1502708584_799483.png) 却看到使用了FP64执行单元。 请问,这是什么原因呢? 另外,如何在kernel里面显式指定计算单元,比如指定使用FP64单元计算FP32指令?
cuda环境装上之后核函数<<<>>>内的参数总是有问题
#include "cuda_runtime.h" #include "device_launch_parameters.h" #include<iostream> using namespace std; #define N 10 __global__ void add(const int *a, const int *b, int *c){ int tid = blockIdx.x; if (tid < N){ c[tid] = a[tid] + b[tid]; } } int main(){ int a[N], b[N], c[N]; int *dev_a, *dev_b, *dev_c; cudaMalloc((void**)&dev_a, N*sizeof(int)); cudaMalloc((void**)&dev_b, N*sizeof(int)); cudaMalloc((void**)&dev_c, N*sizeof(int)); for (int i = 0; i < N; i++){ a[i] = -i; b[i] = i*i; } cudaMemcpy(dev_a, a, N*sizeof(int), cudaMemcpyHostToDevice); cudaMemcpy(dev_b, b, N*sizeof(int), cudaMemcpyHostToDevice); add<<<1,1>>>(dev_a,dev_b, dev_c); cudaMemcpy(c, dev_c, N*sizeof(int), cudaMemcpyHostToDevice); for (int i = 0; i < N; i++){ printf("%d+%d=%d\n",a[i], b[i], c[i]); } cudaFree(dev_a); cudaFree(dev_b); cudaFree(dev_c); return 0; } 提示 add<<<1,1>>>(dev_a,dev_b, dev_c);语句的第一个“1”要输入表达式
我的CUDA输出参数总是错的,全部是253,这是什么情况?
CUDA的核函数传递的参数有输入参数也有输出参数,但是我的输出参数总是错的,全部是253,这是什么情况?[输出函数被重复访问和更改过,难道跟这个有关?] 新手求解答。急!!!
cuda+mpi混合编程的函数调用和编译问题
我现在想用mpi实现两块GPU之间的数据通信,请问在cuda源文件里(xxx.cu)如果包含了<mpi.h>头文件,可以调用mpi函数(如mpi_send),并用nvcc正确编译吗。
GPU编程时每次调试之前都要清理解决方案?
本人新手,刚接触CUDA编程。 Windows 10 vs2017 c++,cuda10.0。 现在遇到一个问题是,如果核函数内的代码进行了修改,进行调试之前都必须先清理一遍解决方案,如果不清理的话程序会执行上一次没有修改的代码,就连本次修改中被注释掉的代码还是会被执行。 虽然每次清理解决方案就可以解决,但还是想弄清楚这是什么原因造成的?是显存没有被释放?希望大神们能解惑,感谢!
cuda向设备端传递多个一维数组,并在核函数修改数组元素值
现在有多个一维数组,我想将他们拷贝到设备端修改他们的值,然后拷贝回host端,代码如下: #include "cuda_runtime.h" #include "device_launch_parameters.h" #include "helper_cuda.h" #include <stdio.h> #include<iostream> using namespace std; #define N 10 __global__ void gpuKernel(int **ptr) { int tid=threadIdx.x; int bid=blockIdx.x; if (tid<N &&bid<N) { ptr[bid][tid]=N; } } int main() { int **hptr,**hostArray; int **dptr,**devArray; hptr=new int *[N]; cudaMalloc(&dptr,N*sizeof(int*)); hostArray=new int *[N]; devArray=new int *[N]; for (int i=0;i<N;i++) { hostArray[i]=new int[N]; for (int j=0;j<N;j++) { hostArray[i][j]=1; } } for (int i=0;i<N;i++) { cudaMemcpy(devArray[i],hostArray[i],N*sizeof(int),cudaMemcpyHostToDevice); hptr[i]=devArray[i];//保存每个数组的头指针 } cudaMemcpy(dptr,hptr,N*sizeof(int*),cudaMemcpyHostToDevice); dim3 dimblock=N; dim3 dimgrid =N; gpuKernel<<<dimgrid,dimblock>>>(dptr); for (int i=0;i<N;i++) { cudaMemcpy(hostArray[i],devArray[i],N*sizeof(int),cudaMemcpyDeviceToHost); } for (int i=0;i<N;i++) { for (int j=0;j<N;j++) { cout<<hostArray[i][j]<<","; } cout<<endl; } //free memory for (int i=0;i<N;i++) { delete []hostArray[i]; cudaFree(devArray[i]); } cudaFree(dptr); /*cudaFree(devArray);*/ delete[]hptr; delete []hostArray; delete[]devArray; return 0; } 最终结果是元素值都为修改,纠结这个问题几天了,并且仔细拜读bendanban大神的博客http://blog.csdn.net/bendanban/article/details/7669624,可能自己理解有误,望各位大神指点
AlexeyAB darknet 怎么用GPU训练?
cuda+cudnn+opencv+vs2017安装应该都没有问题,也用了-gpu 0的命令,ENABLE_CUDA也√了,makefile也试着了GPU=1,CUDNN=1。我想不出来还有哪里出了纰漏,我是真的没辙了,如果有大佬会的,希望私聊我QQ1059605256,可以远程协助检查一下我的环境配置。现在有6G的gpu不知道怎么用。用CPU训练,迭代1000次就要4.5天,全天24小时都运行。真的很无奈。时间紧迫快开学了。
Unexpected CUDA error: invalid argument
我在使用tensorflow-gpu时,运行如下的代码: ``` import tensorflow as tf a = tf.constant([1.0,2.0,3.0],shape = [3],name='a') print(a) ``` 能正确显示 ``tf.Tensor([1. 2. 3.], shape=(3,), dtype=float32)`` 但当我加入以下两行代码 ``` b = tf.constant([1.0,2.0,3.0], shape = [3],name='b') a+b ``` 会报如下的错误 ``` F tensorflow/stream_executor/cuda/cuda_driver.cc:209] Check failed: err == cudaSuccess || err == cudaErrorInvalidValue Unexpected CUDA error: invalid argument ``` 请大神帮忙解答 ================================================ 参照这篇博客,重新安装了一下,问题已经解决了 [https://blog.csdn.net/weixin_43411129/article/details/101390407](https://blog.csdn.net/weixin_43411129/article/details/101390407)
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
MyBatis研习录(01)——MyBatis概述与入门
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis原本是apache的一个开源项目iBatis, 2010年该项目由apache software foundation 迁移到了google code并改名为MyBatis 。2013年11月MyBatis又迁移到Github。
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
Python爬虫精简步骤1 获取数据
爬虫,从本质上来说,就是利用程序在网上拿到对我们有价值的数据。 爬虫能做很多事,能做商业分析,也能做生活助手,比如:分析北京近两年二手房成交均价是多少?广州的Python工程师平均薪资是多少?北京哪家餐厅粤菜最好吃?等等。 这是个人利用爬虫所做到的事情,而公司,同样可以利用爬虫来实现巨大的商业价值。比如你所熟悉的搜索引擎——百度和谷歌,它们的核心技术之一也是爬虫,而且是超级爬虫。 从搜索巨头到人工...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
web前端javascript+jquery知识点总结
1.Javascript 语法.用途 javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
渗透测试-灰鸽子远控木马
木马概述 灰鸽子( Huigezi),原本该软件适用于公司和家庭管理,其功能十分强大,不但能监视摄像头、键盘记录、监控桌面、文件操作等。还提供了黑客专用功能,如:伪装系统图标、随意更换启动项名称和表述、随意更换端口、运行后自删除、毫无提示安装等,并采用反弹链接这种缺陷设计,使得使用者拥有最高权限,一经破解即无法控制。最终导致被黑客恶意使用。原作者的灰鸽子被定义为是一款集多种控制方式于一体的木马程序...
Python:爬取疫情每日数据
前言 目前每天各大平台,如腾讯、今日头条都会更新疫情每日数据,他们的数据源都是一样的,主要都是通过各地的卫健委官网通报。 以全国、湖北和上海为例,分别为以下三个网站: 国家卫健委官网:http://www.nhc.gov.cn/xcs/yqtb/list_gzbd.shtml 湖北卫健委官网:http://wjw.hubei.gov.cn/bmdt/ztzl/fkxxgzbdgrfyyq/xxfb...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允许使用这...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧???? 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升自...
粒子群算法求解物流配送路线问题(python)
1.Matlab实现粒子群算法的程序代码:https://www.cnblogs.com/kexinxin/p/9858664.html matlab代码求解函数最优值:https://blog.csdn.net/zyqblog/article/details/80829043 讲解通俗易懂,有数学实例的博文:https://blog.csdn.net/daaikuaichuan/article/...
教你如何编写第一个简单的爬虫
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。 下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。 第一步:获取页面 #!/usr/bin/python # coding: utf-8 import requests #引入包requests link = "http://www.santostang....
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
情人节来了,教你个用 Python 表白的技巧
作者:@明哥 公众号:Python编程时光 2020年,这个看起来如此浪漫的年份,你还是一个人吗? 难不成我还能是一条狗? 18年的时候,写过一篇介绍如何使用 Python 来表白的文章。 虽然创意和使用效果都不错,但有一缺点,这是那个exe文件,女神需要打开电脑,才有可能参与进来,进而被你成功"调戏”。 由于是很早期的文章了,应该有很多人没有看过。 没有看过的,你可以点击这里查看:用Pyt...
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
立即提问